【pgloader数据迁移根据】

# 该工具能够高效稳定地将MySQL数据迁移到postgresql

# 避免要处理依赖问题，建议使用容器部署 —— (如果想使用源码编译可自行下载：https://github.com/dimitri/pgloader)
docker pull ghcr.io/dimitri/pgloader:latest

# 启动pgloader工具
docker run -itd --name pgloader ghcr.io/dimitri/pgloader:latest

# 准备迁移描述文件mysql185pgsql.conf
LOAD DATABASE
    FROM mysql://sync:sync2025XTW@10.10.104.101:3306/sy_dms
    INTO postgresql://postgres:25D0VieSajcmtBy@10.10.104.185:5432/sy_dms
 WITH
     include drop,                  -- 删除目标数据库中的表（可选）
     create tables,                 -- 自动创建表
     create indexes,                -- 自动创建索引
     reset sequences,               -- 重置序列
 --    data only,                     -- 仅迁移数据
     batch rows = 2000,            -- 每批迁移的行数
     workers = 8,                   -- 并行工作线程数
     prefetch rows = 2000,         -- 预取数据行数
     disable triggers,              -- 禁用触发器提高速度
     quote identifiers              -- 保留标识符

 SET work_mem to '512MB',           -- PostgreSQL 工作内存
     maintenance_work_mem to '1GB', -- PostgreSQL 维护内存
     search_path to 'public'

CAST type datetime to timestamptz
    drop default drop not null using zero-dates-to-null,
    type date when default '0000-00-00' to null,
    type ENUM to TEXT drop not null,
    type SET to TEXT drop not null;

# 【注意-很重要】进行迁移操作的MySQL用户一定要使用 mysql_native_password 身份验证插件，否则无法正常迁移) —— 不支持caching_sha2_password
[
创建用户
CREATE USER 'sync'@'%' IDENTIFIED WITH mysql_native_password BY 'sync2025XTW';

授权该用户可访问所有数据库
GRANT ALL PRIVILEGES ON *.* TO 'pgloader1'@'%' WITH GRANT OPTION;

查看用户的身份验证方式
SELECT user, host, plugin FROM mysql.user WHERE user = 'sync';

修改用户身份验证方式
ALTER USER 'sync'@'%' IDENTIFIED WITH 'mysql_native_password' BY 'sync2025XTW';

在my.cnf添加以下内容(如果是集群，在从库添加(避免重启主库操作)，在哪台服务器添加的就使用哪台服务器进行迁移操作)
[mysqld]
default_authentication_plugin = mysql_native_password

重启MySQL数据库
systemctl restart mysql
]

# 复制迁移描述文件到pgloader容器
docker cp ./mysql185pgsql.conf pgloader:/

# 进入pgloader容器
docker exec -it pgloader /bin/bash

# 执行迁移操作
pgloader mysql185pgsql.conf

# 如果迁移比较大的库(20G以上)，防止连接断点导致数据迁移中断问题，可以打开两台相同的服务器，一台使用ping命令ping mysql服务器的IP，另外一台则进行迁移操作
